 f227fa596134a84516b7c9f3f4bf693d27438adb Mon Sep 17 00:00:00 2001
: wwd <ericrock@foxmail.com>
Date: Tue, 30 Aug 2016 15:54:30 +0800
Subject: [PATCH] sd: fix nanopi-air sdcard detect mode

---
 arch/arm/configs/sun8iw7p1smp_defconfig     |  2 +-
 drivers/mmc/core/core.c                     |  6 +++---
 drivers/mmc/host/sunxi-mci.c                | 19 +++++++++++++++----
 .../nanopi-h3/boards/sys_config_nanopi_air.fex        |  2 +-
 5 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 422c85b..3bef5a9 100755
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2001,17 +2001,17 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
 	/* Order's important: probe SDIO, then SD, then MMC */
 	// pr_info("*******************Try sdio*******************\n");
 	if (!mmc_attach_sdio(host)){
-		pr_info("*******************sdio init ok*******************\n");
+		// pr_info("*******************sdio init ok*******************\n");
 		return 0;
 	}
 	// pr_info("*******************Try sd *******************\n");
 	if (!mmc_attach_sd(host)){
- 		pr_info("*******************sd init ok*******************\n");
+ 		// pr_info("*******************sd init ok*******************\n");
 		return 0;
 	}
 	// pr_info("*******************Try mmc*******************\n");
 	if (!mmc_attach_mmc(host)){
-		pr_info("*******************mmc init ok *******************\n");
+		// pr_info("*******************mmc init ok *******************\n");
 		return 0;
 	}
 
diff --git a/drivers/mmc/host/sunxi-mci.c b/drivers/mmc/host/sunxi-mci.c
index fd9b4d2..0b7c536 100755
--- a/drivers/mmc/host/sunxi-mci.c
+++ b/drivers/mmc/host/sunxi-mci.c
@@ -2103,7 +2103,7 @@ static void sunxi_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 	BUG_ON(ios->power_mode >= sizeof(pwr_mode)/sizeof(pwr_mode[0]));
 	BUG_ON(ios->signal_voltage >= sizeof(vdd)/sizeof(vdd[0]));
 	BUG_ON(ios->timing >= sizeof(timing)/sizeof(timing[0]));
-	SMC_MSG(smc_host, "sdc%d set ios: "
+	SMC_DBG(smc_host, "sdc%d set ios: "
 		"clk %dHz bm %s pm %s vdd %s width %d timing %s dt %s\n",
 		smc_host->pdev->id, ios->clock, bus_mode[ios->bus_mode],
 		pwr_mode[ios->power_mode], vdd[ios->signal_voltage],
@@ -3076,7 +3076,7 @@ static int sunxi_mci_probe(struct platform_device *pdev)
 		smc_host->cd_timer.function = &sunxi_mci_cd_cb;
 		smc_host->cd_timer.data = (unsigned long)smc_host;
 		add_timer(&smc_host->cd_timer);
-		smc_host->present = 0;
+		smc_host->present = !__gpio_get_value(smc_host->pdata->cd.gpio);
 	}else if(smc_host->cd_mode == CARD_DETECT_BY_D3){
 		u32 rval = 0;
 
@@ -4046,6 +4046,15 @@ static int sunxi_mci_get_devinfo(void)
 }
 
 
+static int storage_type;
+static int __init setup_bootdev(char *str)
+{
+	storage_type = simple_strtoul(str,NULL,0);
+	printk("%s %d\n", __func__, storage_type);
+	return 1;
+}
+__setup("storage_type=", setup_bootdev);
+
 static int __init sunxi_mci_init(void)
 {
 	int i;
@@ -4072,8 +4081,10 @@ static int __init sunxi_mci_init(void)
 		mmcinfo = &sunxi_mci_pdata[i];
 		if (mmcinfo->used) {
 			sdc_used |= 1 << i;
-			if (mmcinfo->cdmode == CARD_ALWAYS_PRESENT)
-				boot_card |= 1 << i;
+			if (storage_type == 1)
+				boot_card |= 1 << 0;
+			else if (storage_type == 2)
+				boot_card |= 1 << 2;
 			if (mmcinfo->isiodev)
 				io_used |= 1 << i;
 		}
